package com.lizelinteam.main3
import com.lizelinteam.utils.PathConfig
import org.apache.spark.sql.{SparkSession, functions}

  object Topten {
    def main(args: Array[String]): Unit = {
      // 创建 SparkSession，集群模式下不指定master
      val spark = SparkSession.builder()
        .appName("Repurchase Rate Calculation")
        .getOrCreate()


      // 读取数据，使用PathConfig管理输入路径
      val df = spark.read
        .option("header", "true")
        .option("inferSchema", "true")
        .csv(PathConfig.inputPath)

      // 按 user_id 和 item_id 分组并统计购买次数
      val grouped = df.groupBy("user_id", "item_id")
        .agg(functions.count("item_id").alias("purchase_count"))




      // 统计每个用户购买商品的总数量
      val userPurchaseCount = grouped.groupBy("user_id")
        .agg(functions.sum("purchase_count").alias("total_user_purchase_count"))

      // 按用户购买商品总数量降序排序并取前十个
      val topTenUsers = userPurchaseCount.orderBy(functions.desc("total_user_purchase_count")).limit(10)



      println("购买商品最多的前十名用户：")
      topTenUsers.show()



      topTenUsers.write
        .mode("overwrite")
        .option("header", "true")
        .csv(PathConfig.output42Path)

      println(s"结果已保存至：")
      println(s"用户购买量排名：${PathConfig.output42Path}")

      // 停止 SparkSession
      spark.stop()
    }
  }

